package com.concurrent.synchronizeandreentrant;

/**
 * @ClassName: MyInterrupt
 * @Description: 中断线程
 * 实例方法interrupt，会设置线程的中断状态（默认是false）,将其改为true
 * 实例方法，isInterrupted() 与静态方法interrupted区别。前者只判断状态，不会改变线程状态，后者即判断状态，还会清除中断状态。
 * 当对一个阻塞线程发出中断时，会抛出中断异常，例如sleep或者wait方法阻塞时。
 * @author: li
 * @Date: 2021/8/18 8:48 上午
 */
public class MyInterrupt {
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            {
                // 这里Thread.interrupted()返回的当前线程中断状态，此时这里是中断状态为true
                while (!Thread.interrupted()){
                    System.out.println(Thread.currentThread().getName());

                }
                // 这里中断状态变为了false
                System.out.println(Thread.currentThread().isInterrupted());
                System.out.println("这里执行了" + Thread.currentThread().getName());
            }
        });


        Thread thread1 = new Thread(() -> {
            while (!Thread.currentThread().isInterrupted()){

                System.out.println("我还未中断"+Thread.currentThread());
            }
            System.out.println("我已经中断了");

        });
        thread.start();
        thread1.start();
        thread.interrupt();

        // 如果该线程处于阻塞、限期等待或者无限期等待状态，那么interrupt方法就会抛出 InterruptedException异常，并结束线程
//        Thread.sleep(10);
        // 可以做个定时器，规定子线程自执行10秒。
        thread1.interrupt();

    }
}
